﻿#include "socket.h"

Socket::Socket() {
}

int Socket::initSocket() {
    struct sockaddr_in server_addr; // 服务器结构体

    // 申请网络套接字文件
    if ((clientFd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        perror("socket");
        return -1;
    }
    printf("申请IPV4的TCP协议的网络套接字成功\n");

    bzero(&server_addr, sizeof(struct sockaddr_in));
    //初始化服务器端的套接字，并用htons和htonl将端口和地址转成网络字节序
    server_addr.sin_family = AF_INET;                   // 指定协议是使用IPV4的协议
    server_addr.sin_port = htons(SERVER_PORT);          // 指定端口号,htons用短整型的方式转化为网络字节序
    server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); //将字符串的IP地址转化为网络字节序的数据

    // 连接服务器
    if (connect(clientFd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in)) == -1) {
        perror("connect");
        return -2;
    }
    cout << "连接服务器成功" << endl;
    return 0;
}

void Socket::sendMsg(string &buf) {
    const char *temp = buf.c_str();
    send(clientFd, temp, buf.length(), 0); // 客户端发送数据
}

void Socket::readMsg(string &buf) {
    char temp[1024];
    memset(temp, 0, 1024);
    int dataSize = recv(clientFd, temp, 1024, 0); // 从服务器读取数据
    buf = temp;
    cout << "readMsg:" << buf << endl;
    if (dataSize <= 0) {
        cout << "recv msg error" << endl;
    }
}
